UE.registerUI("message", function (editor) {
    var editorui = baidu.editor.ui;
    var Message = editorui.Message;
    var holder;
    var _messageItems = [];
    var me = editor;

    me.setOpt("enableMessageShow", true);
    if (me.getOpt("enableMessageShow") === false) {
        return;
    }

    me.addListener("ready", function () {
        holder = document.getElementById(me.ui.id + "_message_holder");
        updateHolderPos();
        setTimeout(function () {
            updateHolderPos();
        }, 500);
    });

    me.addListener("showmessage", function (type, opt) {
        opt = utils.isString(opt)
            ? {
                content: opt
            }
            : opt;
        var message = new Message({
                timeout: opt.timeout,
                type: opt.type,
                content: opt.content,
                keepshow: opt.keepshow,
                editor: me
            }),
            mid = opt.id || "msg_" + (+new Date()).toString(36);
        message.render(holder);
        _messageItems[mid] = message;
        message.reset(opt);
        updateHolderPos();
        return mid;
    });

    me.addListener("updatemessage", function (type, id, opt) {
        opt = utils.isString(opt)
            ? {
                content: opt
            }
            : opt;
        var message = _messageItems[id];
        message.render(holder);
        message && message.reset(opt);
    });

    me.addListener("hidemessage", function (type, id) {
        var message = _messageItems[id];
        message && message.hide();
    });

    function updateHolderPos() {
        if (!holder || !me.ui) return;
        var toolbarbox = me.ui.getDom("toolbarbox");
        if (toolbarbox) {
            holder.style.top = toolbarbox.offsetHeight + 3 + "px";
        }
        holder.style.zIndex =
            Math.max(me.options.zIndex, me.iframe.style.zIndex) + 1;
    }
});
